LINQ-এ Join অপারেটরটি ব্যবহার করে দুটি বা তার বেশি ডেটা সোর্সকে একত্রিত করা যায়। তবে, যখন Group Join এবং Nested Join এর মতো কৌশল ব্যবহার করা হয়, তখন একটু ভিন্ন ধরনের ফলাফল পাওয়া যায়। এখানে আমরা Group Join এবং Nested Join এর মধ্যে পার্থক্য এবং তাদের ব্যবহার দেখব।
Group Join হল LINQ-এর একটি বিশেষ ধরনের জয়েন অপারেশন যা একটি টেবিলের প্রতিটি রেকর্ডের জন্য অন্য টেবিলের একাধিক রেকর্ড গ্রুপ করে। এর মাধ্যমে আপনি একটি one-to-many সম্পর্ক তৈরি করতে পারেন। এটি মূলত একটি left outer join এর মত কাজ করে যেখানে মূল (left) টেবিলের সব রেকর্ড থাকবে এবং তাদের সাথে সম্পর্কিত রেকর্ডগুলো গ্রুপ করা হবে।
Group Join সাধারণত into কিওয়ার্ডের সাথে ব্যবহার করা হয়, যাতে একটি গ্রুপ এক্সপ্রেশন তৈরি হয়, যা পরে select ব্লকে অ্যাক্সেস করা যায়।
var result = from left in leftCollection
join right in rightCollection on left.Key equals right.Key into groupResult
select new { left, Group = groupResult };
এখানে:
class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
}
class Order
{
public int OrderID { get; set; }
public int CustomerID { get; set; }
public string Product { get; set; }
}
List<Customer> customers = new List<Customer>
{
new Customer { CustomerID = 1, Name = "Alice" },
new Customer { CustomerID = 2, Name = "Bob" },
new Customer { CustomerID = 3, Name = "Charlie" }
};
List<Order> orders = new List<Order>
{
new Order { OrderID = 101, CustomerID = 1, Product = "Laptop" },
new Order { OrderID = 102, CustomerID = 1, Product = "Phone" },
new Order { OrderID = 103, CustomerID = 2, Product = "Tablet" }
};
// Group Join এর ব্যবহার
var customerOrders = from customer in customers
join order in orders on customer.CustomerID equals order.CustomerID into customerGroup
select new
{
customer.Name,
Orders = customerGroup
};
foreach (var customer in customerOrders)
{
Console.WriteLine($"{customer.Name} has the following orders:");
foreach (var order in customer.Orders)
{
Console.WriteLine($"- {order.Product}");
}
}
// Output:
// Alice has the following orders:
// - Laptop
// - Phone
// Bob has the following orders:
// - Tablet
// Charlie has the following orders:
এখানে:
Nested Join হল LINQ এর একটি স্টাইল যেখানে একাধিক join অপারেশনকে একত্রিত করা হয় এবং তা nested query হিসাবে তৈরি করা হয়। এটি একধরনের join within a join এবং সাধারণত multiple tables এর মধ্যে সম্পর্ক তৈরি করার জন্য ব্যবহৃত হয়।
এখানে, আমরা প্রথমে একটি সাধারণ join করি, তারপর সেই join এর মধ্যে আরেকটি join করি।
var result = from a in collection1
join b in collection2 on a.Key equals b.Key
join c in collection3 on b.Key equals c.Key
select new { a, b, c };
এখানে:
class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
}
class Order
{
public int OrderID { get; set; }
public int CustomerID { get; set; }
public string Product { get; set; }
}
class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
List<Customer> customers = new List<Customer>
{
new Customer { CustomerID = 1, Name = "Alice" },
new Customer { CustomerID = 2, Name = "Bob" }
};
List<Order> orders = new List<Order>
{
new Order { OrderID = 101, CustomerID = 1, Product = "Laptop" },
new Order { OrderID = 102, CustomerID = 1, Product = "Phone" },
new Order { OrderID = 103, CustomerID = 2, Product = "Tablet" }
};
List<Product> products = new List<Product>
{
new Product { ProductID = 1, ProductName = "Laptop" },
new Product { ProductID = 2, ProductName = "Phone" },
new Product { ProductID = 3, ProductName = "Tablet" }
};
// Nested Join ব্যবহার করা
var customerOrders = from customer in customers
join order in orders on customer.CustomerID equals order.CustomerID
join product in products on order.Product equals product.ProductName
select new
{
customer.Name,
order.OrderID,
product.ProductName
};
foreach (var order in customerOrders)
{
Console.WriteLine($"{order.Name} ordered {order.ProductName} with OrderID: {order.OrderID}");
}
// Output:
// Alice ordered Laptop with OrderID: 101
// Alice ordered Phone with OrderID: 102
// Bob ordered Tablet with OrderID: 103
এখানে:
বৈশিষ্ট্য | Group Join | Nested Join |
---|---|---|
কাজের ধরন | একাধিক সম্পর্কিত রেকর্ডগুলিকে গ্রুপ করে। | একাধিক join অপারেশন একসাথে করা। |
ফলাফল | একটি রেকর্ডের সাথে সম্পর্কিত একাধিক রেকর্ডের গ্রুপ। | একাধিক টেবিলের ডেটা একসাথে একত্রিত করা। |
উপযুক্ত ব্যবহার | একাধিক সম্পর্কিত ডেটার গ্রুপিং প্রয়োজন হলে। | একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করা। |
LINQ এ Group Join এবং Nested Join উভয় পদ্ধতি আপনাকে আপনার ডেটা আরো গভীরভাবে সম্পর্কিত করে কাজ করার সুযোগ দেয়।
common.read_more